#include <stdio.h>      //优先查找系统路径
#include <string.h>
#include "Student.h"    //优先从当前路径下查找
#include "Teacher.h"

bool IsNameEqual(Stu *s, void *value)
{
    char *name = (char *)value;
    return strcmp(s->Name, name) == 0;
}

bool IsAgeEqual(Stu *s, void *value)
{
    return s->age == *(int*)value;
}

bool IsScoreGreater(Stu *s, void *value)
{
    return s->score >= *(double*)value;
}


int main()
{
#if 0
    //声明结构体变量
    //struct Student s;   //单独出现的Student不能表明结构体，也就是说结构体的声明必须得带上struct,为了避免麻烦，引入了typedef
    
    //初始化
    Stu s = {"zhangsan", 1, 20, 99};    //对里面的每个变量单独进行赋值
    
    //结构体成员变量的访问（用.访问，.所代表的是当前对象中的每个成员变量）
    //printf("%s %d %d %.1lf\n", s.Name, s.id, s.age, s.score);   //%lf表示双精度输出，.1表示保留一位小数
    PrintStu(&s);   //把上面的打印封装成函数，因为后面会多次用到
    //PrintStu(s);  //错误写法，所有的变量在传参的时候传的是值，应该传地址

    //成员变量修改
    s.age = 21;
    //字符数组的成员变量，不能用=赋值
    //s.Name = "lisi";  //错误写法（lisi在文字常量区，不能直接赋给栈上的数组）
    strcpy(s.Name, "lisi"); //所以要想赋值，只能用字符串拷贝
    PrintStu(&s);
#endif

#if 1
    //结构体数组
    Stu s[3];
    for(int i = 0; i < 3; i++)
    {
        scanf("%s %d %d %lf", s[i].Name, &s[i].id, &s[i].age, &s[i].score);
        //从终端上输入数据到结构体的内存当中必须要取地址，所有非字符串一定都要取地址（这里的Name不用取地址）
    }

    for(int i = 0; i < 3; i++)
    {
        PrintStu(&s[i]);    //PrintStu(s+i);
    }
#endif

    Teach t;
    InitTeacher(&t, "zhangsan", 40);
    InsertStu(&t, "李四", 1, 20, 97);
    InsertStu(&t, "李四", 2, 21, 98);
    InsertStu(&t, "王五", 2, 23, 97);
    InsertStu(&t, "赵六", 3, 22, 100);
    // PrintTeacher(&t);
    // RemoveStu(&t, "李四");
    // PrintTeacher(&t);

    //回调：提高代码的复用性
#if 0
    Stu *s = FindFirstStu(&t, "李四", IsNameEqual);
    if(s)   //s如果为真，也就是存在
    {
        PrintStu(s);
    }
    else
    {
        printf("没找到！\n");
    }
#endif

#if 0
    Stu *s = FindFirstStu(&t, (void*)23, IsAgeEqual);
    if(s)
    {
        PrintStu(s);
    }
    else
    {
        printf("没找到！\n");
    }
#endif

#if 0
    double score = 98;
    Stu *s = FindFirstStu(&t, &score, IsScoreGreater);
    if(s)
    {
        PrintStu(s);
    }
    else
    {
        printf("没找到！\n");
    }
#endif


    return 0;
}